<?php
/**
 * Model类职责：主要作为验证数据的中介者，并把真正验证的工作交给request去做
 * 而request也把其验证工作交给check类去做，最后一层层返回给Action来告知数据操作的结果
 */
class Model extends DB {
    protected $db = null;           //取得DB类的句柄
    protected $fields = array();      //数据表需要的字段
    protected $tables = array();         //需要进行操作数据表，做成数组是因为其可能需要多表操作
    protected $check = null;        //验证类句柄
    protected $limit = '';
    protected $R = array();        //接收$_POST和$_GET传递过来的各种参数
    protected function __construct() {
        $this->db = parent::getDB();
    }
    protected function add($needData) {
        //parent::add()  这里不可以直接使用父类DB的add方法，因为父类的pdo句柄必须要父类实例过后才能拥有，而这里并没有执行过父类的方法，所以此时pdo句柄是空的
        return $this->db->add($this->tables[0],$needData);
    }
    protected function update($updateData,$condition) {
        return $this->db->update($this->tables[0],$updateData,$condition);
    }
    protected function select(Array $tables,Array $fields,Array $condition=array()) {
        return $this->db->select($tables,$fields,$condition);
    }
    protected function total($condition=array()) {
        return $this->db->total($this->tables[0],$condition);
    }
    protected function nextId($table) {
        return $this->db->nextId($table);
    }
    //这里使用方法来实例request，这样可以解决放在构造方法中实例request产生冲突的问题
    protected function getRequest() {
        return Request::getInstance($this,$this->check);
    }
    //检查一条数据
    public function isOne(Array $condition) {
        return $this->db->isOne($this->tables[0],$condition);
    }
    public function delete(Array $condition) {
        return $this->db->delete($this->tables[0],$condition);
    }
    public function setLimit($limit) {
        $this->limit = $limit;
    }
    //展示构建sql
    public function showSql() {
        $this->db->showSql();
    }
}

?>